/*     */ package com.zimbra.cs.index.query;
/*     */ 
/*     */ import com.zimbra.cs.index.DBQueryOperation;
/*     */ import com.zimbra.cs.index.QueryOperation;
/*     */ import com.zimbra.cs.mailbox.Mailbox;
/*     */ import java.text.ParseException;
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ public final class SizeQuery
/*     */   extends Query
/*     */ {
/*     */   private final Type type;
/*     */   private long size;
/*     */   
/*     */   public static enum Type
/*     */   {
/*  33 */     EQ("="),  GT(">"),  LT("<");
/*     */     
/*     */     private final String symbol;
/*     */     
/*     */     private Type(String symbol) {
/*  38 */       this.symbol = symbol;
/*     */     }
/*     */     
/*     */     public String toString()
/*     */     {
/*  43 */       return this.symbol;
/*     */     }
/*     */   }
/*     */   
/*     */ 
/*     */ 
/*     */   public SizeQuery(Type type, String text)
/*     */     throws ParseException
/*     */   {
/*  52 */     char ch = text.charAt(0);
/*  53 */     if (ch == '>') {
/*  54 */       this.type = Type.GT;
/*  55 */       text = text.substring(1);
/*  56 */     } else if (ch == '<') {
/*  57 */       this.type = Type.LT;
/*  58 */       text = text.substring(1);
/*     */     } else {
/*  60 */       this.type = type;
/*     */     }
/*     */     
/*  63 */     boolean hasEQ = false;
/*  64 */     ch = text.charAt(0);
/*  65 */     if (ch == '=') {
/*  66 */       text = text.substring(1);
/*  67 */       hasEQ = true;
/*     */     }
/*     */     
/*  70 */     char typeChar = '\000';
/*     */     
/*  72 */     typeChar = Character.toLowerCase(text.charAt(text.length() - 1));
/*     */     
/*  74 */     if (typeChar == 'b') {
/*  75 */       text = text.substring(0, text.length() - 1);
/*  76 */       typeChar = Character.toLowerCase(text.charAt(text.length() - 1));
/*     */     }
/*     */     
/*     */ 
/*     */ 
/*     */ 
/*  82 */     int multiplier = 1;
/*  83 */     switch (typeChar) {
/*     */     case 'k': 
/*  85 */       multiplier = 1024;
/*  86 */       break;
/*     */     case 'm': 
/*  88 */       multiplier = 1048576;
/*  89 */       break;
/*     */     case 'g': 
/*  91 */       multiplier = 1073741824;
/*     */     }
/*     */     
/*     */     
/*  95 */     if (multiplier > 1) {
/*  96 */       text = text.substring(0, text.length() - 1);
/*     */     }
/*     */     try
/*     */     {
/* 100 */       this.size = (Long.parseLong(text.trim()) * multiplier);
/*     */     } catch (NumberFormatException e) {
/* 102 */       throw new ParseException(text, 0);
/*     */     }
/*     */     
/* 105 */     if (hasEQ) {
/* 106 */       switch (this.type) {
/*     */       case GT: 
/* 108 */         this.size -= 1L;
/* 109 */         break;
/*     */       case LT: 
/* 111 */         this.size += 1L;
/*     */       }
/*     */       
/*     */     }
/*     */   }
/*     */   
/*     */   public boolean hasTextOperation()
/*     */   {
/* 119 */     return false;
/*     */   }
/*     */   
/*     */   public QueryOperation compile(Mailbox mbox, boolean bool)
/*     */   {
/* 124 */     DBQueryOperation op = new DBQueryOperation();
/* 125 */     switch (this.type) {
/*     */     case GT: 
/* 127 */       op.addSizeRange(this.size, false, -1L, false, evalBool(bool));
/* 128 */       break;
/*     */     case LT: 
/* 130 */       op.addSizeRange(-1L, false, this.size, false, evalBool(bool));
/* 131 */       break;
/*     */     case EQ: 
/* 133 */       op.addSizeRange(this.size, true, this.size, true, evalBool(bool));
/* 134 */       break;
/*     */     default: 
/* 136 */       if (!$assertionsDisabled) throw new AssertionError(this.type);
/*     */       break; }
/* 138 */     return op;
/*     */   }
/*     */   
/*     */   public void dump(StringBuilder out)
/*     */   {
/* 143 */     out.append("SIZE:");
/* 144 */     out.append(this.type);
/* 145 */     out.append(this.size);
/*     */   }
/*     */   
/*     */   public void sanitizedDump(StringBuilder out)
/*     */   {
/* 150 */     out.append("SIZE:");
/* 151 */     out.append(this.type);
/* 152 */     out.append("$NUM");
/*     */   }
/*     */ }


/* Location:              /home/mint/zimbrastore.jar!/com/zimbra/cs/index/query/SizeQuery.class
 * Java compiler version: 7 (51.0)
 * JD-Core Version:       0.7.1
 */